package service

import (
	"fmt"
	"ginchat/common/middleware"
	"ginchat/config"
	"ginchat/models"
	"ginchat/repo"
	"ginchat/utils"
	"github.com/gin-gonic/gin"
	"time"
)

// UserRegister 用户注册
func UserRegister(c *gin.Context) {
	user := models.UserBasic{}
	if err := c.ShouldBindBodyWithJSON(&user); err != nil {
		fmt.Println("请求参数错误", err)
		CommonCJsonReply(c, config.ERROR, "请求参数错误")
		return
	}
	// 查询用户是否存在
	existUser := repo.GetUserByUserName(user.UserName)
	if existUser != nil {
		CommonCJsonReply(c, config.ERROR, "用户已存在")
		return
	}
	// 把密码加密
	md5Pwd := utils.MakePassword(user.PassWord)
	user.PassWord = md5Pwd

	res := repo.CreateUser(&user)
	if res != nil {
		fmt.Println("创建用户失败", res)
		CommonCJsonReply(c, config.ERROR, "创建用户失败")
		return
	}
	CommonCJsonReply(c, config.SUCCESS, "注册成功")
}

// UserLogin 用户注册
func UserLogin(c *gin.Context) {
	user := models.UserBasic{}
	if err := c.ShouldBindBodyWithJSON(&user); err != nil {
		fmt.Println("请求参数错误", err)
		CommonCJsonReply(c, config.ERROR, "请求参数错误")
		return
	}
	fmt.Println("请求user参数", user)
	// 查询用户是否存在
	existUser := repo.GetUserByUserName(user.UserName)
	if existUser == nil {
		CommonCJsonReply(c, config.ERROR, "用户不存在")
		return
	}
	// 判断密码是否正确
	if utils.ValidatePassword(user.PassWord, existUser.PassWord) == false {
		CommonCJsonReply(c, config.ERROR, "密码错误")
		return
	}
	// 生成token
	token, err := middleware.GenerateToken(user.UserName, user.PassWord)
	if err != nil {
		fmt.Println("生成token失败", err)
		CommonCJsonReply(c, config.ERROR, "生成token失败")
		return
	}

	// 登录成功
	CommonCJsonReply(c, config.SUCCESS, gin.H{
		"token": token,
	})
	// 更新用户登录信息
	existUser.LoginTime = uint64(time.Now().Unix())
	existUser.ClientIp = c.ClientIP()
	existUser.HeartbeatTime = uint64(time.Now().Unix())
	err = repo.UpdateUser(existUser)
	if err != nil {
		fmt.Println("更新用户登录信息失败", err)
		return
	}
}
